Realizado por Letticia Nicoli
Esse markdown descreve, de forma breve, o que aprendi durante as aulas de “Programando IA com R” como ferramenta estatística e de modelagem de inteligência artificial.
Apenas para testes simples, não use isso em produção! Coloque em uma variável :)
1:5
## [1] 1 2 3 4 5
50:20
## [1] 50 49 48 47 46 45 44 43 42 41 40 39 38 37 36 35 34 33 32 31 30 29 28
## [24] 27 26 25 24 23 22 21 20
6:-3
## [1] 6 5 4 3 2 1 0 -1 -2 -3
4:4
## [1] 4
1:0
## [1] 1 0
pi:6
## [1] 3.141593 4.141593 5.141593
Atribuindo um valor as varíaveis!
a <- "1" -> b
c <- "2" -> d
e <- "3" -> f
g <- "4" -> h
i <- "5"
Obs.: Tá tudo bem, podemos utilizar = ao invés de <-
Os valores especiais são NA, NaN, Inf e -Inf, Null
Exemplos:
var_na = NA
var_nan = 0/0
var_inf = 9/0
var_inf_neg = -1/0
var_null = NULL
NA vs NULL
c(18,NA,NA,19,50)
## [1] 18 NA NA 19 50
c(18,NA,NULL,19,50)
## [1] 18 NA 19 50
Existem funções para validarmos se a variável é um valor especial:
is.na(var_na)
## [1] TRUE
is.nan(var_nan)
## [1] TRUE
is.infinite(var_inf)
## [1] TRUE
is.infinite(var_inf_neg)
## [1] TRUE
is.finite(var_inf)
## [1] FALSE
is.null(var_null)
## [1] TRUE
E antes de irmos mais a fundo…
Se for precisar de ajudar utilize o comando ? seguido do nome da função, operador, pacotes e etc que você tem dúvida.
Conforme exemplo abaixo:
?`:`
?'is.infinite'
Vetor Inteiro
vetor_inteiro <- 11:13
vetor_inteiro
## [1] 11 12 13
Vetor Numérico
vetor_numerico <- c(1.1,1.2,1.3)
vetor_numerico
## [1] 1.1 1.2 1.3
Vetor Texto
vetor_texto <- letters[11:13]
vetor_texto
## [1] "k" "l" "m"
Vetor Imaginário
vetor_imaginario <- c((1+1i), (1+2i),(1+1i))
vetor_imaginario
## [1] 1+1i 1+2i 1+1i
Vetor Lógico
vetor_logico <- c(TRUE,FALSE,TRUE)
vetor_logico
## [1] TRUE FALSE TRUE
list(vetor_inteiro,vetor_numerico,vetor_texto,vetor_imaginario,vetor_logico)
## [[1]]
## [1] 11 12 13
##
## [[2]]
## [1] 1.1 1.2 1.3
##
## [[3]]
## [1] "k" "l" "m"
##
## [[4]]
## [1] 1+1i 1+2i 1+1i
##
## [[5]]
## [1] TRUE FALSE TRUE
No começo do markdown vimos que fazendo {valor}:{valor} conseguimos ter uma sequência de valores porém se você quer algo mais elaborado podemos utilizar a função seq para realizar ações como intervalo entre valores, quantidade total de valores dentro daquela sequência e etc.
seq(0, 1, length.out = 11)
## [1] 0.0 0.1 0.2 0.3 0.4 0.5 0.6 0.7 0.8 0.9 1.0
seq(1, 9, by = 2)
## [1] 1 3 5 7 9
seq(1, 6, by = 3)
## [1] 1 4
seq_len(17)
## [1] 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
numerospares <- matrix(seq(from = 2,by = 2,length.out = 16), nrow =4)
numerospares
## [,1] [,2] [,3] [,4]
## [1,] 2 10 18 26
## [2,] 4 12 20 28
## [3,] 6 14 22 30
## [4,] 8 16 24 32
Conseguimos ir muito além com matrizes, como por exemplo realizar multiplicação entre elas :O
Definindo algumas variáveis
vet_a = c(10,20,30,40,50)
vet_b = vet_a * 2
vet_c = sqrt(vet_b)
Criando nossas 2 matrizes:
m1 = matrix(data = c(vet_a,vet_b,vet_c),
ncol = 5, nrow = 6, byrow = TRUE)
m2 = matrix(data = c(vet_a,vet_b,vet_c),
ncol = 6, nrow = 5)
A mágica acontecendo:
m1 %*% m2
## [,1] [,2] [,3] [,4] [,5] [,6]
## [1,] 5500.000 11000.000 1261.362 5500.000 11000.000 1261.362
## [2,] 11000.000 22000.000 2522.725 11000.000 22000.000 2522.725
## [3,] 1261.362 2522.725 300.000 1261.362 2522.725 300.000
## [4,] 5500.000 11000.000 1261.362 5500.000 11000.000 1261.362
## [5,] 11000.000 22000.000 2522.725 11000.000 22000.000 2522.725
## [6,] 1261.362 2522.725 300.000 1261.362 2522.725 300.000
Obs.: Sem % multiplica elemento por elemento, com % multiplica a matrix Se quisermos ir além, temos também matriz transposta t(), diagonal diag(), inversa solve()!
data.frame("Inteiros" = vetor_inteiro,
"Numéricos" = vetor_numerico,
"Textos" = vetor_texto,
"Imaginários" = vetor_imaginario,
"Lógicos" = vetor_logico,
row.names = c("L1","L2","L3"))
## Inteiros Numéricos Textos Imaginários Lógicos
## L1 11 1.1 k 1+1i TRUE
## L2 12 1.2 l 1+2i FALSE
## L3 13 1.3 m 1+1i TRUE
rep(0, times = 20)
## [1] 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0
rep(c(0, 1, 2), times = 10)
## [1] 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2 0 1 2
rep(c(0, 1, 2), each = 10)
## [1] 0 0 0 0 0 0 0 0 0 0 1 1 1 1 1 1 1 1 1 1 2 2 2 2 2 2 2 2 2 2
Estou utilizando o dataset mtcars do próprio R para demonstrar como conseguimos filtrar informações.
mtcars
## mpg cyl disp hp drat wt qsec vs am gear carb
## Mazda RX4 21.0 6 160.0 110 3.90 2.620 16.46 0 1 4 4
## Mazda RX4 Wag 21.0 6 160.0 110 3.90 2.875 17.02 0 1 4 4
## Datsun 710 22.8 4 108.0 93 3.85 2.320 18.61 1 1 4 1
## Hornet 4 Drive 21.4 6 258.0 110 3.08 3.215 19.44 1 0 3 1
## Hornet Sportabout 18.7 8 360.0 175 3.15 3.440 17.02 0 0 3 2
## Valiant 18.1 6 225.0 105 2.76 3.460 20.22 1 0 3 1
## Duster 360 14.3 8 360.0 245 3.21 3.570 15.84 0 0 3 4
## Merc 240D 24.4 4 146.7 62 3.69 3.190 20.00 1 0 4 2
## Merc 230 22.8 4 140.8 95 3.92 3.150 22.90 1 0 4 2
## Merc 280 19.2 6 167.6 123 3.92 3.440 18.30 1 0 4 4
## Merc 280C 17.8 6 167.6 123 3.92 3.440 18.90 1 0 4 4
## Merc 450SE 16.4 8 275.8 180 3.07 4.070 17.40 0 0 3 3
## Merc 450SL 17.3 8 275.8 180 3.07 3.730 17.60 0 0 3 3
## Merc 450SLC 15.2 8 275.8 180 3.07 3.780 18.00 0 0 3 3
## Cadillac Fleetwood 10.4 8 472.0 205 2.93 5.250 17.98 0 0 3 4
## Lincoln Continental 10.4 8 460.0 215 3.00 5.424 17.82 0 0 3 4
## Chrysler Imperial 14.7 8 440.0 230 3.23 5.345 17.42 0 0 3 4
## Fiat 128 32.4 4 78.7 66 4.08 2.200 19.47 1 1 4 1
## Honda Civic 30.4 4 75.7 52 4.93 1.615 18.52 1 1 4 2
## Toyota Corolla 33.9 4 71.1 65 4.22 1.835 19.90 1 1 4 1
## Toyota Corona 21.5 4 120.1 97 3.70 2.465 20.01 1 0 3 1
## Dodge Challenger 15.5 8 318.0 150 2.76 3.520 16.87 0 0 3 2
## AMC Javelin 15.2 8 304.0 150 3.15 3.435 17.30 0 0 3 2
## Camaro Z28 13.3 8 350.0 245 3.73 3.840 15.41 0 0 3 4
## Pontiac Firebird 19.2 8 400.0 175 3.08 3.845 17.05 0 0 3 2
## Fiat X1-9 27.3 4 79.0 66 4.08 1.935 18.90 1 1 4 1
## Porsche 914-2 26.0 4 120.3 91 4.43 2.140 16.70 0 1 5 2
## Lotus Europa 30.4 4 95.1 113 3.77 1.513 16.90 1 1 5 2
## Ford Pantera L 15.8 8 351.0 264 4.22 3.170 14.50 0 1 5 4
## Ferrari Dino 19.7 6 145.0 175 3.62 2.770 15.50 0 1 5 6
## Maserati Bora 15.0 8 301.0 335 3.54 3.570 14.60 0 1 5 8
## Volvo 142E 21.4 4 121.0 109 4.11 2.780 18.60 1 1 4 2
Uma das maneiras para selecionar uma informação em especiífico é utilizar {nomeDataSet}[{numeroLinha}:{numeroColuna}].
mtcars[2,5] #row,column
## [1] 3.9
mtcars[2:4,5]
## [1] 3.90 3.85 3.08
mtcars[2:4,5:7]
## drat wt qsec
## Mazda RX4 Wag 3.90 2.875 17.02
## Datsun 710 3.85 2.320 18.61
## Hornet 4 Drive 3.08 3.215 19.44
mtcars[8:9, c(1,2,4)]
## mpg cyl hp
## Merc 240D 24.4 4 62
## Merc 230 22.8 4 95
mtcars[2:4, c("mpg", "wt")]
## mpg wt
## Mazda RX4 Wag 21.0 2.875
## Datsun 710 22.8 2.320
## Hornet 4 Drive 21.4 3.215
Obs.: Como podemos observar também é possível utilizar sequências e vetores para trazer mais informações.
Distribuição uniforme
runif(n=2, min = 1, max = 10)
## [1] 2.927022 8.419497
Avalia probabilidade
dunif(x= 8, min = 1, max = 10)
## [1] 0.1111111
Obs.: Número máximo nao é sorteado.
Avalia probabilidade acumulada
punif(q= 2, min = 1, max = 10)
## [1] 0.1111111
Amostra a partir de um domínio
Colocar marcador para que o sorteio sempre seja igual
set.seed(1)
amostra = c( "T", "R", "I", "A", "N", "G", "U", "L", "O", "S")
sample(x = amostra, replace = FALSE)
## [1] "O" "A" "U" "T" "R" "N" "I" "S" "G" "L"
sample(x = amostra, replace = TRUE)
## [1] "I" "T" "N" "N" "S" "G" "S" "U" "O" "N"
sample(x = amostra, size = 5)
## [1] "N" "O" "T" "G" "S"
sample(x = amostra, size = 10, replace = TRUE,
prob = c(1, 1, 5, 1, 1, 1, 1, 1, 1, 5))
## [1] "O" "S" "S" "G" "S" "I" "A" "L" "A" "I"
Simulando um modelo linear
set.seed(20)
b0 = rep(0.5, times = 100)
b1 = rep(2, times = 100)
x = rnorm(n = 100, mean = 0, sd = 1)
e = rnorm(n = 100, mean = 0, sd = 2)
valor = b0 + (b1 * x) + e
library(plotly)
## Loading required package: ggplot2
##
## Attaching package: 'plotly'
## The following object is masked from 'package:ggplot2':
##
## last_plot
## The following object is masked from 'package:stats':
##
## filter
## The following object is masked from 'package:graphics':
##
## layout
plot_ly( x = x, y = valor, type = "scatter" )
## No scatter mode specifed:
## Setting the mode to markers
## Read more about this attribute -> https://plot.ly/r/reference/#scatter-mode
Obs.: A função plot_ly permite a criação de gráficos
acumuladora = 0;
vetor = NULL;
for (passenger in AirPassengers) {
acumuladora = acumuladora + passenger;
vetor = c(vetor, acumuladora);
}
Obs.: O dataset AirPassengers vem por padrão no R
func = function(num){
init = 1;
for (variable in seq_len(num)) {
init = init * variable;
}
init
}
func(3)
## [1] 6
Parábola Quadrática
x = -10:10
plot( x = x, y = x**2, main = "Parábola")
plot( x = x, y = x**2, main = "Parábola", type='l')
plot( x = x, y = x**2, main = "Parábola", type='p')
plot( x = x, y = x**2, main = "Parábola", type='b')
plot( x = x, y = x**2, main = "Parábola", type='o')
plot( x = x, y = x**2, main = "Parábola", type='h')
plot( x = x, y = x**2, main = "Parábola", type='s')
plot( x = x, y = x**2, main = "Parábola", type='S')
Análise de Tendências
head(cars)
## speed dist
## 1 4 2
## 2 4 10
## 3 7 4
## 4 7 22
## 5 8 16
## 6 9 10
summary(cars)
## speed dist
## Min. : 4.0 Min. : 2.00
## 1st Qu.:12.0 1st Qu.: 26.00
## Median :15.0 Median : 36.00
## Mean :15.4 Mean : 42.98
## 3rd Qu.:19.0 3rd Qu.: 56.00
## Max. :25.0 Max. :120.00
plot(x= cars$speed, y = cars$dist)
Histograma Frequência e distribuição
sequency = -10:10
hist(sequency^2)
Boxplot
f = airquality$Ozone ~ airquality$Month
boxplot(f,data=airquality)
Multiplos Gráficos
par(mfrow=c(1,2))
plot(airquality$Wind, airquality$Ozone)
plot(airquality$Solar.R, airquality$Ozone)
Obs.: O dataset Airquality também vem por padrão no R
O operador %>% (pipe) foi uma das grandes revoluções do R, tornando a leitura de códigos mais lógica, fácil e compreensível.
É necessário ter instalado o pacote magrittr
library(magrittr)
A ideia do operador %>% (pipe) é bem simples: usar o valor resultante da expressão do lado esquerdo como primeiro argumento da função do lado direito.
Vamos calcular a raiz quadrada da soma dos valores de 1 a 4. Primeiro, sem o pipe.
x <- c(1, 2, 3, 4)
sqrt(sum(x))
## [1] 3.162278
Agora com o pipe.
x %>% sum %>% sqrt
## [1] 3.162278
Distribuição
set.seed(1909)
x = rnorm(15,mean = rep(1:3, each=5),sd = 0.2)
y = rnorm(15,mean = rep(c(1,2), each=5),sd = 0.2)
plot(x,y,col='blue',pch=19,cex=1)
text(x + 0.05, y + 0.05, labels=as.character(1:15))
Kmeans
mydata = data.frame(x,y)
modelo = kmeans(x = mydata, centers = 3)
modelo$centers
## x y
## 1 1.042156 1.026402
## 2 2.004588 1.923189
## 3 3.157757 1.057685
Acima podemos observar os centroides dos clusters!
Existe um dataset do Starwars <3
Você vai precisar instalar o pacote dplyr
library('dplyr')
##
## Attaching package: 'dplyr'
## The following objects are masked from 'package:stats':
##
## filter, lag
## The following objects are masked from 'package:base':
##
## intersect, setdiff, setequal, union
head(starwars)
## # A tibble: 6 x 13
## name height mass hair_color skin_color eye_color birth_year gender
## <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr>
## 1 Luke… 172 77 blond fair blue 19 male
## 2 C-3PO 167 75 <NA> gold yellow 112 <NA>
## 3 R2-D2 96 32 <NA> white, bl… red 33 <NA>
## 4 Dart… 202 136 none white yellow 41.9 male
## 5 Leia… 150 49 brown light brown 19 female
## 6 Owen… 178 120 brown, gr… light blue 52 male
## # … with 5 more variables: homeworld <chr>, species <chr>, films <list>,
## # vehicles <list>, starships <list>
starwars %>% filter(species == "Droid")
## # A tibble: 5 x 13
## name height mass hair_color skin_color eye_color birth_year gender
## <chr> <int> <dbl> <chr> <chr> <chr> <dbl> <chr>
## 1 C-3PO 167 75 <NA> gold yellow 112 <NA>
## 2 R2-D2 96 32 <NA> white, bl… red 33 <NA>
## 3 R5-D4 97 32 <NA> white, red red NA <NA>
## 4 IG-88 200 140 none metal red 15 none
## 5 BB8 NA NA none none black NA none
## # … with 5 more variables: homeworld <chr>, species <chr>, films <list>,
## # vehicles <list>, starships <list>
| Todo esse conteúdo está disponível no meu GitHub, clique aqui :)